package webbrow.board.spring.model;

import java.util.HashMap;
import java.util.List;

import org.mybatis.spring.SqlSessionTemplate;

import webbrow.board.component.BoardSpringDao;
import webbrow.board.vo.BoardSpringVO;
import webbrow.board.vo.CategoryVO;
import webbrow.board.vo.SearchCommand;

public class BoardSpringDaoImpl implements BoardSpringDao {
	private SqlSessionTemplate sqlSessionTemplate;
	public BoardSpringDaoImpl(SqlSessionTemplate sqlSessionTemplate){
		super();
		this.sqlSessionTemplate=sqlSessionTemplate;
	}
	/**
	 * 글 쓰기
	 */
	public void insertSpringBoard(BoardSpringVO vo) {
		System.out.println("Dao test"+vo);
		this.sqlSessionTemplate.insert("board.insertSpringBoard", vo);
	}
	/**
	 * 글 상세보기
	 */
	public BoardSpringVO selectSpringBoard(int no) {
		return this.sqlSessionTemplate.selectOne("board.selectSpringBoard", no);
	}
	/**
	 * 글 삭제
	 */
	public void deletePost(int no) {
		this.sqlSessionTemplate.delete("board.deletePost", no);
	}
	/**
	 * 조회수 증가
	 */
	public void updateHits(int no) {
		this.sqlSessionTemplate.update("board.updateHits", no);
	}
	/**
	 * 게시물 리스트
	 */
	public List<?> selectAllBoard() {
		return this.sqlSessionTemplate.selectList("board.selectAllBoard");
	}
	/**
	 * 총 게시물 수
	 */
	public int selectTotalPostingCount(HashMap map) {
		return this.sqlSessionTemplate.selectOne("board.selectTotalPostingCount", map);
	}
	/**
	 * 해당 페이지 리스트
	 */
	public List<BoardSpringVO> selectPostingList(CategoryVO cvo) {
		System.out.println("dao"+cvo);
		if(cvo.getCategory().equals("notice")){
			return this.sqlSessionTemplate.selectList("board.selectPostingNoticeList", cvo);
		} else {
			return this.sqlSessionTemplate.selectList("board.selectPostingList", cvo);
		}
	}
	public List<?> selectByKeyword(SearchCommand command) {
		return null;
	}
	/**
	 * 글 수정
	 */
	public void updateSpringBoard(BoardSpringVO vo) {
		this.sqlSessionTemplate.update("board.updateSpringBoard",vo);
	}
	/**
	 * 글 수정하는 페이지
	 */
	public BoardSpringVO updateView(int no) {
		return this.sqlSessionTemplate.selectOne("board.updateView",no);
	}
	public int selectCountRef(int no) {
		return 0;
	}
	public int insertSpringResponse(BoardSpringVO vo) {
		return 0;
	}
	public void updateCountRestep(BoardSpringVO vo) {
	}
	
	
	/**
	 * 가장 최근에 쓰여진 게시물을 가져오는 메소드 -인수-
	 */
	@Override
	public List selectLatestPostingList() {
		return this.sqlSessionTemplate.selectList("board.selectLatestPostingList");
	}
	
	/**
	 * 가장 인기있는 게시물을 가져오는 메소드 -인수-
	 */
	@Override
	public List selectHottestPostingList() {
		return this.sqlSessionTemplate.selectList("board.selectHottestPostingList");
	}
	
	/**
	 * 가장 최근에 쓰여진 자유게시판 게시물을 가져오는 메소드 -인수-
	 */
	@Override
	public List selectFreeBoardPostingList() {
		return this.sqlSessionTemplate.selectList("board.selectFreeBoardPostingList");
	}
	/**
	 * 댓글달기
	 */
	public void insertComment(BoardSpringVO vo){
		this.sqlSessionTemplate.insert("board.insertComment", vo);
	}
	/**
	 * ref 값 증가
	 */
	public void updateRef(BoardSpringVO vo){
		this.sqlSessionTemplate.update("board.updateRef", vo);
	}
	
	/**
	 * -------------------------------------글 수정하는 부분--------------------------------------
	 */
	/**
	 * saveFileName 리스트를 가져오는 메소드
	 */
	@Override
	public String selectSaveFileNameListByNo(int no) {
		return this.sqlSessionTemplate.selectOne("board.selectSaveFileNameListByNo", no);
	}
	
	/**
	 * map에 글 번호와 갱신된 saveFileName을 보내는 메소드
	 */
	@Override
	public void updateSaveFileName(HashMap map) {
		this.sqlSessionTemplate.update("board.updateSaveFileName",map);
	}
	
	/**
	 * 파일 수정 없을 시 DB 글 업데이트 메소드
	 */
	@Override
	public void updateSpringBoardNoFileChange(BoardSpringVO vo) {
		this.sqlSessionTemplate.update("board.updateSpringBoardNoFileChange", vo);
	}
	
	/**
	 * orgFileName 리스트를 가져오는 메소드
	 */
	@Override
	public String selectOrgFileNameListByNo(int no) {
		return this.sqlSessionTemplate.selectOne("board.selectOrgFileNameListByNo", no);
	}
	
	/**
	 * map에 글 번호와 갱신된 orgFileName을 보내는 메소드
	 */
	@Override
	public void updateOrgFileName(HashMap map) {
		this.sqlSessionTemplate.update("board.updateOrgFileName",map);
	}
}
